From: Owen W. Taylor Date: Tue, 22 Feb 2011 14:25:48 +0000 (-0500) Subject: tweener: remove tweens when target.actor is destroyed X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~8909 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=192d3a94edebbd497a4aa445da76eb73933d627c;p=gnome-shell.git tweener: remove tweens when target.actor is destroyed We already remove tweens automatically when a Clutter actor is destroyed; do the same when the target is a JS delegate with an actor property. https://bugzilla.gnome.org/show_bug.cgi?id=642925 --- diff --git a/js/ui/tweener.js b/js/ui/tweener.js index 685f4b3a6..8a633bd34 100644 --- a/js/ui/tweener.js +++ b/js/ui/tweener.js @@ -62,9 +62,16 @@ function addTween(target, tweeningParameters) { function _wrapTweening(target, tweeningParameters) { let state = _getTweenState(target); - if (target instanceof Clutter.Actor && !state.destroyedId) - state.destroyedId = target.connect('destroy', _actorDestroyed); - + if (!state.destroyedId) { + if (target instanceof Clutter.Actor) { + state.actor = target; + state.destroyedId = target.connect('destroy', _actorDestroyed); + } else if (target.actor && target.actor instanceof Clutter.Actor) { + state.actor = target.actor; + state.destroyedId = target.actor.connect('destroy', function() { _actorDestroyed(target); }); + } + } + _addHandler(target, tweeningParameters, 'onStart', _tweenStarted); _addHandler(target, tweeningParameters, 'onComplete', _tweenCompleted); } @@ -82,7 +89,7 @@ function _resetTweenState(target) { if (state) { if (state.destroyedId) - target.disconnect(state.destroyedId); + state.actor.disconnect(state.destroyedId); if (state.idleCompletedId) Mainloop.source_remove(state.idleCompletedId); }